library(tidyverse)
library(sf)
library(terra)
library(openxlsx)
library(mapview)
library(RColorBrewer)
library(osrm)
library(movecost)
library(fs)
library(stringr)
library(DT)
library(synthdid)
library(summarytools)
mapview::mapviewOptions(fgb=FALSE)
load("data/china.RData")
load("data/sakhalin2.RData")
load("data/sakhalin3.RData")
ntl1992<-terra::rast(x="data/9828827/Harmonized_DN_NTL_2013_calDMSP.tif")
z<-terra::rast(x="data/9828827/DN_NTL_2013_simVIIRS.tif")
ntl2018<-terra::rast(x="data/9828827/Harmonized_DN_NTL_2014_simVIIRS.tif")
ntl1992 <- ntl1992 %>%
terra::crop(y=ext(c(123.1,146.9,24.0,45.7)))
ntl2018 <- z %>%
terra::crop(y=ext(c(123.1,146.9,24.0,45.7)))1992年日本
terra::plot(ntl1992)
2018年光り輝く日本 若干赤くなってる?
terra::plot(ntl2018)
・夜間光は近年民生・産業部門での複合的な経済指標の代理変数として社会科学領域での応用が広まっています。
・NTL(夜間光)データについては、中小発展途上国のさらに細かい行政区において経済活動の代理変数として使っても良いのかという議論が活発に行われています。
・Are night-time lights a good proxy of economic activity in rural areas in middle and low-income countries? Examining the empirical evidence from Colombia論文は、コロンビアを例に夜間光と詳細な経済指数の比較分析を行いました。
・結果、都市部の方が経済を予測する精度は高いですが、農村部でも十分な正の相関が確認され、夜間光が非常に有用なデータであることを示しました。
・特に、経済状況を示すデータにアクセスできないような地域(今回示す北方領土やチベット地域)を時系列で分析する際に有用であると考えることができます。
・今回用いるのは、1992-2018年までのNTLであり、Harmonized VIIRS & DMSPという二種類の計測方法を重み図けしてつなぎ合わせたものを利用していきます。
因果推論アプローチの一つであるPotential outcome frameworkにおいて重要なのは 観察しえない反実仮想\(Y_{itD=0}\)をいかにして導き出すかという問題です。
反実仮想というのは例えば、統一した東ドイツ(に当たる地域の)経済\(Y_{itD=1}\)に対する統一しなかった場合の東ドイツ経済\(Y_{itD=0}\)や拓銀が倒産した後の北海道経済(観察可能)に対する拓銀が生存した場合の北海道経済(観察不可能)などです。
今回紹介するSDID法は、本当に簡単に言うと
拓銀が倒産しなかった世界線の北海道を、他のいろんな県を組み合わせて作ろう!
という発想が元になっています。
SDID法は差分の差分法(DID法)と合成コントロール法(SC)を組み合わせた手法です。
DID推定量は以下の通りです (書き方は様々あるが)\[ (\hat{\tau}^{DID}, \hat{\mu}, \hat{\alpha}, \hat{\beta})={\arg\min}_{\mu,\alpha,\beta,\tau} \sum_{i=1}^N \sum_{t=1}^T(Y_{it}-\mu-\alpha_i-\beta_t-D_{it}\tau)^2 \] 各ユニット・時間における結果変数\(Y_{it}\)は定数\(\mu\)、時間効果\(\beta\)、個人効果\(\alpha\)の線形結合で表されます。今回求めたい因果効果をとらえるのは処置変数\(D_{it}\)の係数\(\hat{\tau}^{DID}\)です。このモデルの最小化を行うことでDID推定量は求められます。
一方、合成コントロール法はSynthetic Control Methods for Comparative Case Studies(Abadie et al. 2010) で提案されました。
アイデアとしては、処置を受ける前まで処置群を統制群(処置を受けない群)の重み付け(加重平均)で近似できるような重み \(\hat\omega\) を求めて、その加重平均で処置後の処置群を予測し、その差分を処置効果とするものです。それを表す式は以下の通りです。
\[ \hat{\tau}_{it}^{synth}=Y_{Nt}-\sum_{i=1}^{N-1}\omega_{i}Y_{it} \]
問題の重み\(\hat\omega_{i}\)は処置前までの期間、つまり\(T-1\)期に注目して以下のL2正則化項(罰則付き)二乗誤差最小化問題で求められます。
\[ \hat{\omega}_{i}=\underset{\omega}{\arg\min}\frac{1}{T-1} \sum_{t=1}^{T-1}(\sum_{i=1}^{N-1} \omega_{i} Y_{i t}-Y_{N t})^{2}+ \frac{1}{2}\zeta\|\omega\|_2 \]
…つまり、どちらも処置群と統制群のバイアス(元の違い)と処置前と処置後のバイアス(放っておいても変化するかも)を統制して差分(処置効果)を取りたい訳です。そのなかで、いかに”並行トレンド仮定”という非常につよい仮定を緩められるかという所が問題になっていますね。
ですが、合成コントロール法ユニットごとの重み\(\hat\omega_{i}\)しか使っていません。もちろん、重要な年と重要じゃない年を峻別するような時間の重みも考えられますよね!
そのような時間に対する重み\(\lambda_{t}\)を合わせてDID推定量の中に組み込んでしまったのが今回使用するSynthDID推定量です。(\(\hat\lambda_{t}\)の推定に関しては\(\hat\omega_{i}\)の最小化問題の対象がユニットから時間に変わっただけです。)
\[ (\hat{\tau}^{SDID}, \hat{\mu}, \hat{\alpha}, \hat{\beta})={\arg\min}_{\mu,\alpha,\beta,\tau} (\sum_{i=1}^N \sum_{t=1}^T(Y_{it}-\mu-\alpha_i-\beta_t-D_{it}\tau)^2 \hat{\omega}^{SDID}_i \hat{\lambda}^{SDID}_t) \]
\[ \mathbf{where}(\hat\lambda_0,\hat\lambda^{sdid})=\arg\min \sum_{i=1}^{N-1}(\lambda_{0}+\sum_{t=1}^{T-1}\lambda_{t}Y_{it}-\frac{1}{T_{post}}\sum_{t=T}^{Tpost}Y_{it})^2 \]
・簡単に扱える
・説明・解釈がしやすい
・少ない処置群&大量の対照群
・夜間光データと相性がいい(観測誤差が均一に起こるため、特定ユニットに対する因果効果の推定量に影響しない)
ーそれだけ、ロシア政府は東部前線基地の開発計画に投資しているのだ。
このプログラムには180億ルーブルの資金が投入され、前任者とは異なり、全額が融資されます。 新しいインフラの構築と既存のインフラの近代化に重点が置かれます。
交通機関- 岸壁、空港、道路
エネルギー - 送電網と新しい発電能力
社会的なもの - 病院や幼稚園の建設、新しい住宅の建設など…
-連邦政府目標プログラム「クリル諸島の社会的・経済的開発」より
mapview(RUS %>% filter(ID_1==60))クリル諸島(北方領土)は1996年にロシアによる開発計画が策定されましたが、国内経済等の混乱もあり立ち消えになっていましたが、2007年から本格的な資本投下が行われ、主に民生部門での発展が計画されました。 しかし当該地域は特殊な状況に置かれており、どの程度発展したのか分析できるようなデータにアクセスすることは出来ません。
しかし夜の光を隠すことは出来ないでしょう。
データ前処理(省略) 折り畳み –>
ntl<-function(x){
i<-terra::extract(
x=x,
y,
fun="sum",
na.rm=T
)
i<-select(i,!ID)
return(i)
}
RUS<-sf::read_sf(dsn="data/RUS_adm/RUS_adm3.shp")
y<-terra::vect(sf::read_sf(dsn="data/RUS_adm/RUS_adm3.shp"))
#mapview(RUS %>% filter(NAME_1 %in% c("Kamchatka", "Khabarovsk" ,"Sakhalin")))
russia <- lapply(filecon, ntl)#ほんとに時間かかります
rus1<-bind_cols(russia)
rus1<-rus1 |>
as.tibble() |>
rename_with(\(x) str_replace(x, "Harmonized_DN_NTL_", " "))
rusdata<-bind_cols(RUS,rus1)
rusdata<-rusdata |>
as.data.frame() |>
select(!c("ID_0","ISO","NAME_0","TYPE_3","ENGTYPE_3","VARNAME_3","geometry","NAME_3","NL_NAME_3"))
rusdf<-rusdata |>
pivot_longer(cols = c(` 1992_calDMSP`: ` 2018_simVIIRS`),
names_to = "year",
values_to = "ntl") |>
mutate(lntl=log(ntl+1))
rusarea<-expanse(y, unit="m", transform=TRUE)/1000000
rusarea<-rusarea |>
as.tibble() |>
mutate(ID=1:length(rusarea))
rusdf2<-left_join(rusdf,rusarea,by=c("ID_3"="ID"),copy=T)
rusdf2<-rusdf2 %>%
mutate(perarea=ntl/value,
lperarea=log(perarea+1))
rusdf2$year<-as.double(str_sub(rusdf2$year,2,5))
east<-rusdf2 %>%
filter(ID_1 %in% c(3,9,83,82,24,56,28,60,40,61, 12))極東連邦管区(北方領土も含む)の夜間光(対数)/面積データ
使用したデータは後述します
DT::datatable(east %>% select(NAME_1,NAME_2,year,lperarea))summary(east %>% select(ntl,lntl,value,perarea,lperarea))## ntl lntl value perarea
## Min. : 0 Min. : 0.000 Min. : 0.2 Min. : 0.00000
## 1st Qu.: 1011 1st Qu.: 6.919 1st Qu.: 3033.7 1st Qu.: 0.07882
## Median : 3680 Median : 8.211 Median : 9825.0 Median : 0.45290
## Mean : 29452 Mean : 7.636 Mean : 29476.7 Mean : 7.05588
## 3rd Qu.: 8456 3rd Qu.: 9.043 3rd Qu.: 34714.7 3rd Qu.: 2.11444
## Max. :11078183 Max. :16.220 Max. :320110.2 Max. :295.14318
## lperarea
## Min. :0.00000
## 1st Qu.:0.07587
## Median :0.37356
## Mean :0.88117
## 3rd Qu.:1.13605
## Max. :5.69084
east<-rusdf2 %>%
filter(ID_1 %in% c(3,9,83,82,24,56,28,60,40,61, 12))クリル諸島(北方領土)の夜間光の伸び(対数)
kril %>%
ggplot() +
geom_line(aes(x = year, y = lperarea))
east<-east %>% #データ整形
filter(year<=2015) %>%
mutate(treatment=if_else(ID_3==1820,if_else(year>=2007,1,0),0)) %>%
as.data.frame()
setup = panel.matrices(east,time="year",treatment= "treatment",
outcome ="lperarea",unit="ID_3") #計画行列
tau.hat = synthdid_estimate(setup$Y, setup$N0, setup$T0) #推定
top.controls = synthdid_controls(tau.hat)[1:10, , drop=FALSE] #ウェイト計算(上位10個)
se = sqrt(vcov(tau.hat, method='placebo')) #std.erro点推定・95%信頼区間
sprintf('point estimate: %1.2f', tau.hat)## [1] "point estimate: -0.01"
sprintf('95%% CI (%1.2f, %1.2f)', tau.hat - 1.96 * se, tau.hat + 1.96 * se)## [1] "95% CI (-0.46, 0.45)"
推定結果(プロット)
synthdid::synthdid_plot(tau.hat)
青の折れ線はクリル諸島(北方領土)のデータであり、赤のグラフは統制群の加重平均によって近似された反実仮想である。
synthdid_units_plot(tau.hat, units = rownames(top.controls))
重み\(\hat\omega\)の大きさプロット
北方領土の夜間光は仮に社会経済発展プログラムを実行しなかった場合に比べ、平均的に-0.01(log y)つまり1%減少し、効果がある政策とは言えないという結果になった。
しかし他のロシア極東地域も同様に著しく発展していると理解することも可能であり、連邦政府がサハリン2を含む 極東開発に非常に力を入れているのが確認出来る。
今後、中国のゼロコロナ政策撤廃によりエネルギー需要がさらにひっ迫することが予見されており、西側諸国に制裁を受けているロシアは極東のエネルギー開発に活路を見出す可能性がある。
工事中です。
データ・参考文献
Synthetic Difference In Differences(Arkhangelsky et. al., 2019)を読んだhttps://dropout009.hatenablog.com/entry/2019/05/06/185620
その無茶振り,(Rで)GISが解決しますhttps://rpubs.com/k_takano/r_de_gis